// 在使用toast方法时可以传入参数，也可以不传入参数
// 如果需要传入参数，要传入对象作为参数
// const toast = (options = {}) => {}
/**
 * @description消息提示框
 * @param {Object} option 参数和 wx.showToast 参数保持一致
 */
const toast = ({
  title = '数据加载中...',
  icon = 'none',
  duration = 2000,
  mask = true
} = {}) => {
  // 如果用户传入了对象作为参数
  // 在形参位置通过解构的方式获取用户传入的参数，同时设置默认值

  wx.showToast({
    title,
    icon,
    duration,
    mask
  })
}

/**
 *@description模态对话框
 *@param{Object} options 参数和wx.showModal保持一致
 */
const modal = (options = {}) => {
  //在方法内部需要通过 resolve 返回用户的操作
  // 如果用户点击确定，需要通过resole 返回 true
  // 如果用用户点击取消，需要通过resolve返回true
  return new Promise((resolve) => {
    //默认参数
    const defaultOpt = {
      title: '提示',
      content: '您确定执行该操作吗？',
      confirmColor: '#f3514f'
    }

    // 通过Object.assign()方法将参数进行合并
    // 需要使用传入的参数覆盖默认参数
    // 为了不影响默认的参数，需要将合并以后的参数赋值给一个空对象
    const opts = Object.assign({}, defaultOpt, options)

    wx.showModal({
      // 将合并以后的参数通过展开运算符赋值给wx.showModal对象
      ...opts,
      complete({ confirm, cancel }) {
        confirm && resolve(true)
        cancel && resolve(false)
      }
    })
  })
}

// 如果有很多 .js文件，都需要调用toast方法
// 每次使用都需要导入toast，然后进行调用，太麻烦
// 可以将toast方法挂载到wx全局对象身上
// 如果想挂载到wx全局对象上这种写法生效，需要让当前文件执行一次
wx.toast = toast
wx.modal = modal

// 如果其他.js文件，需要使用toast方法
// 需要先导入toast，然后进行调用才可以
export { toast, modal }
